#ifndef _SEM_H_
#define _SEM_H_

#include<iostream>
#include<semaphore.h>

class Sem
{
public:
    Sem(int value)
    {
        sem_init(&_sem,0,value);
    }
    void p()
    {
        sem_wait(&_sem);
    }
    void v()
    {
        sem_post(&_sem);
    }
    ~Sem()
    {
        sem_destroy(&_sem);
    }
private:
    sem_t _sem;
};
// class Sem
// {
// public:
//     Sem(int value)
//     {
//         sem_init(&_sem,0,value);
//     }
//     void p()
//     {
//         sem_wait(&_sem);
//     }
//     void v()
//     {
//         sem_post(&_sem);
//     }
//     ~Sem()
//     {
//         sem_destroy(&_sem);
//     }
// private:
//     sem_t _sem;
// };
// class Sem
// {
// public:
//     Sem(int value)
//     {
//         sem_init(&_sem,0,value);
//     }
//     void p()
//     {
//         sem_wait(&_sem);
//     }
//     void v()
//     {
//         sem_post(&_sem);
//     }
//     ~Sem()
//     {
//         sem_destroy(&_sem);
//     }
// private:
//     //pv操作本质上就是用信号量实现的
//     sem_t _sem;
// };
// class Sem
// {
// public:
//     Sem(int value)
//     {
//         sem_init(&_sem,0,value);
//     }
//     void p()
//     {
//         //等待资源
//         sem_wait(&_sem);
//     }
//     void v()
//     {
//         //分发资源
//         sem_post(&_sem);
//     }
//     ~Sem()
//     {
//         sem_destroy(&_sem);
//     }
// private:
//     sem_t _sem;
// };
// class Sem
// {
// public:
//     Sem(int value)
//     {
//         sem_init(&_sem,0,value);
//     }
//     void p()
//     {
//         sem_wait(&_sem);
//     }
//     void v()
//     {
//         sem_post(&_sem);
//     }
//     ~Sem()
//     {
//         sem_destroy(&_sem);
//     }
// private:
//     sem_t _sem;
// };
// class Sem
// {
// public:
//     Sem(int value)
//     {
//         sem_init(&_sem,0,value);
//     }
//     void p()
//     {
//         //等待资源
//         sem_wait(&_sem);
//     }
//     void v()
//     {
//         //分配资源
//         sem_post(&_sem);
//     }
// private:
//     sem_t _sem;
// };
// class Sem
// {
// public:
//     Sem(int value)
//     {
//         sem_init(&_sem,0,value);
//     }
//     void p()
//     {
//         sem_wait(&_sem);
//     }
//     void v()
//     {
//         sem_post(&_sem);
//     }
//     ~Sem()
//     {
//         sem_destroy(&_sem);
//     }
// private:
//     sem_t _sem;
// };


#endif 
